1. Field of the Invention
The present invention generally relates to the programming of fuses, and more particularly to sequential programming of electrical fuses.
2. Description of the Related Art
Electrical fuses are commonly used on integrated circuits (ICs) for the programming of manufacturer settings. For example, common uses are the enabling of redundancy on memory ICs, the trimming of certain parameters to compensate for process variations, and the customization of the IC's external specification and behavior. Typically, an electrical fuse is comprised of either a narrow conducting wire or a thin insulating layer between two conducting layers. Information (one bit) is stored (programmed) in the electrical fuse by either leaving the electrical fuse intact or blowing the electrical fuse to change its resistance beyond a certain threshold.
If the electrical fuse is of the first type (i.e., including a narrow conducting wire), changing its resistance beyond a certain threshold can be achieved by forcing a large enough current through the fuse, causing the narrow conducting wire to disintegrate (i.e., blowing the fuse) and thus increasing its resistance by several orders of magnitude. If the electrical fuse is of the second type (i.e., including a thin insulating layer between two conducting layers), the electrical fuse is initially of high resistance. Changing its resistance beyond a certain threshold can be achieved by applying a large enough voltage across the insulating layer causing a breakdown of this layer (i.e., blowing the fuse). This causes the initial resistance to decrease by several orders of magnitude.
Information stored in an electrical fuse can be read out by opening a current path from a supply voltage across the fuse to a latch. A switching point of the latch is typically chosen to be somewhere between the average resistances of an intact fuse and that of a blown one. As a result, the latch flips in different directions when connected to blown and intact fuses, effectively digitizing the two analog values of the resistance. The readout of a fuse happens at a voltage level that is significantly lower compared to the voltage applied when blowing the fuse (commonly referred to as the blow voltage). This is necessary in order to ensure that repeated read-outs do not damage the fuse.
The success rate for the blowing of fuses correlates strongly to the blow voltage that is applied across the fuse as well as the time window during which the blow voltage is applied. The requirement for a well defined blow voltage makes it difficult to blow fuses in parallel. Both types of fuses, as described above, change their resistance significantly during blowing. If one tries to blow several fuses in parallel, the first fuse to actually blow changes the amount of current it draws and therefore also changes the voltage that is applied across the other fuses that are subjected to the blow voltage at the same time. This means that each fuse that actually blows changes the conditions to which the other fuses are subjected, which make it very difficult to control the blow process. Therefore it is generally preferable to blow fuses in a serial fashion (one fuse at a time).
However, test time and costs become an issue when fuses are to be blown serially. This is especially true for Dynamic Random Access Memories (DRAMs) which employ only electrical fuses. For example, the circuitry used to enable redundancy on a DRAM might contain as many as 2,000 to 20,000 fuses. In reality, on most DRAM chips, only a small percentage of these fuses will actually be blown. The reason is that even if all redundant memory elements (a memory element may comprise a number of memory cells) are used to replace defective normal memory elements, statistically only half the fuses will be blown. Moreover, it is very unlikely that every single redundant memory element is needed for replacing defective normal memory elements. As a result, for a technology that has reached a production-stage, it is typically valid to assume that less than 10 percent of the fuses on an average DRAM will be blown.
The time needed to reliably blow a fuse is strongly dependent on the type of the fuse, the applied blow voltage, and a wide range of technology parameters. Generally, the blow time for a fuse is in the microsecond to millisecond range. Accordingly, because a DRAM may contain thousands of fuses, serial fuse programming may add significant time to the length of a test flow.
There are two widely used methods of addressing (i.e., selecting) fuses for blowing. The first method employs an address decoder to individually address fuses of a memory chip. Therefore, each of the fuses must be assigned a unique address. However, adding an address decoder just for addressing the fuses is generally cost prohibitive because such a decoder with associated address wiring consumes chip area. As a result, this method is viable only if there are address decoders in other circuits of the chip that can be reused for the addressing of the fuses.
The second method employs a pointer shift register of N bits, N fuse latches in series, and N blow circuits in order to program (i.e., blow or leave intact) N fuses. Each of the N fuses corresponds to a bit of the pointer shift register and has a fuse latch and a blow circuit associated with it. The programming data for the N fuses (e.g., a string of 1s and 0s) is shifted into the N fuse latches. Then, a pointer value is shifted sequentially through the N bits of the pointer shift register, one bit for each clock pulse (called a program cycle). When the pointer is at a bit of the shift register, the corresponding fuse is selected (i.e., pointed to by the pointer). For example, in one implementation, all N bits of the pointer shift register initially contain 1s. Then, a 0 (i.e., the pointer) is shifted sequentially through the bits of the pointer shift register to select fuses.
During a program cycle, a fuse is selected and is programmed (blown or not blown) depending on the content of its associated fuse latch. For example, if the associated fuse latch contains a 0, the associated blow circuit is not enabled and the selected fuse is left intact. If the associated fuse latch contains a 1, the associated blow circuit is enabled and a blow voltage is applied across the selected fuse so as to blow the fuse. During the next programming cycle, the next fuse is selected and is programmed (blown or not blown) depending on the content of its associated fuse latch, and so on. One problem of this second method is that programming cycles during which no fuse is blown (called empty programming cycles) waste time. Moreover, because a large percentage of the fuses of a chip do not need to be blown, most of the programming time is wasted on empty programming cycles, which is undesirable.
Accordingly, there is a need for an apparatus and method for the programming of the fuses, which overcomes shortcomings existing in the prior art.